Флаги не меняются.
Команда:
LODS source-str
Логика:
Accumulator = (DS:SI)
if DF = 0
SI = SI + n ; n = 1 для байта, 2 - для слова
else
SI = SI - n
Команда LODS передает байт или слово, расположенное по адресу DS:SI в AX или AL, а также инкрементирует или декрементирует SI (в зависимости от состояния флага направления DF), чтобы указатель переместился на следующий элемент.
| Операнды | Такт байты (слова) | Обращения | Байты | Пример |
| source-str | 12(16) | - | 1 | LODS LIST |
| (повтор) source-str | 9+13(17) | /rep 1/rep | 1 | REP LODS LIST |
Примечания:
Эта команда всегда ассемблируется или как LODSB, загрузка строки из байтов, или как LODSW, загрузка строки из слов, в зависимости от того, указывает ли source-str на строку байтов или на строку слов. Однако, в обоих случаях Вы должны в явном виде загрузить в регистр SI смещение строки.
Хотя и разрешется использовать эту команду в повторном режиме, это почти никогда не делается, т.к. это привело бы к постоянному изменению значения в AL.
Следующий пример иллюстрирует пересылку восьми байтов иэ INIT_PORT в порт 250. (Не пробуйте делать этого на вашей машине, если Вы не знаете о назначении порта 250.)
INIT_PORT:
DB '$CMD0000' ;Строка, которую мы хотим переслать
CLD ;Будем передвигаться в прямом
;направлении
LEA SI,INIT_PORT ;Засылаем в SI стартовый адрес
;строки
MOV CX,8 ;CX является счетчиком
;для команды LOOP
AGAIN: LODS INIT_PORT ;В имени INIT_PORT ассемблер
OUT 250,AL ;нуждается только для того, чтобы
; определить, имеет ли он дело
LOOP AGAIN ; с байтами или со словами